// 地理编码服务
// 用于将坐标转换为地址信息

/**
 * 保定市主要区域坐标范围
 */
const BAODING_AREAS = {
  '竞秀区': { lat: [38.85, 38.95], lng: [115.45, 115.55] },
  '莲池区': { lat: [38.80, 38.90], lng: [115.40, 115.50] },
  '满城区': { lat: [38.90, 39.00], lng: [115.30, 115.40] },
  '清苑区': { lat: [38.70, 38.80], lng: [115.50, 115.60] },
  '徐水区': { lat: [39.00, 39.10], lng: [115.60, 115.70] },
  '涞水县': { lat: [39.30, 39.40], lng: [115.70, 115.80] },
  '阜平县': { lat: [38.80, 38.90], lng: [114.20, 114.30] },
  '定兴县': { lat: [39.20, 39.30], lng: [115.70, 115.80] },
  '唐县': { lat: [38.70, 38.80], lng: [114.90, 115.00] },
  '高阳县': { lat: [38.60, 38.70], lng: [115.70, 115.80] },
  '容城县': { lat: [39.00, 39.10], lng: [115.80, 115.90] },
  '涞源县': { lat: [39.30, 39.40], lng: [114.60, 114.70] },
  '望都县': { lat: [38.70, 38.80], lng: [115.10, 115.20] },
  '安新县': { lat: [38.90, 39.00], lng: [115.80, 115.90] },
  '易县': { lat: [39.20, 39.30], lng: [115.40, 115.50] },
  '曲阳县': { lat: [38.60, 38.70], lng: [114.60, 114.70] },
  '蠡县': { lat: [38.50, 38.60], lng: [115.50, 115.60] },
  '顺平县': { lat: [38.80, 38.90], lng: [115.10, 115.20] },
  '博野县': { lat: [38.40, 38.50], lng: [115.40, 115.50] },
  '雄县': { lat: [38.90, 39.00], lng: [116.00, 116.10] }
}

/**
 * 根据坐标判断所在区域
 * @param {number} latitude - 纬度
 * @param {number} longitude - 经度
 * @returns {string} 区域名称
 */
export const getAreaByCoordinates = (latitude, longitude) => {
  for (const [areaName, bounds] of Object.entries(BAODING_AREAS)) {
    if (latitude >= bounds.lat[0] && latitude <= bounds.lat[1] &&
        longitude >= bounds.lng[0] && longitude <= bounds.lng[1]) {
      return areaName
    }
  }
  return '保定市'
}

/**
 * 获取详细地址信息
 * @param {number} latitude - 纬度
 * @param {number} longitude - 经度
 * @returns {Promise<Object>} 地址信息
 */
export const getAddressInfo = async (latitude, longitude) => {
  try {
    // 实际项目中，这里应该调用高德地图或百度地图的地理编码API
    // 例如：https://lbs.amap.com/api/webservice/guide/api/georegeo
    
    const area = getAreaByCoordinates(latitude, longitude)
    
    return {
      city: '保定市',
      district: area,
      address: `河北省保定市${area}`,
      formatted: `河北省保定市${area}`
    }
  } catch (error) {
    console.error('获取地址信息失败:', error)
    return {
      city: '保定市',
      district: '未知区域',
      address: '河北省保定市',
      formatted: '河北省保定市'
    }
  }
}

/**
 * 计算两点间距离（公里）
 * @param {number} lat1 - 起点纬度
 * @param {number} lng1 - 起点经度
 * @param {number} lat2 - 终点纬度
 * @param {number} lng2 - 终点经度
 * @returns {number} 距离（公里）
 */
export const calculateDistance = (lat1, lng1, lat2, lng2) => {
  const R = 6371 // 地球半径（公里）
  const dLat = (lat2 - lat1) * Math.PI / 180
  const dLng = (lng2 - lng1) * Math.PI / 180
  const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
            Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
            Math.sin(dLng / 2) * Math.sin(dLng / 2)
  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
  return R * c
}

// 你的高德Web服务Key
const AKEY = 'd93428c62f0f8fcbcbe1be9e05893e41'; // 请替换为你自己的高德Web服务Key

/**
 * 根据坐标获取地址和adcode
 * @param {number} latitude - 纬度
 * @param {number} longitude - 经度
 * @returns {Promise<Object|null>} 地址信息，包括 adcode, address, city, district
 */
export const getAddressFromCoords = async (latitude, longitude) => {
  try {
    const url = `https://restapi.amap.com/v3/geocode/regeo?output=json&location=${longitude},${latitude}&key=${AKEY}&radius=1000&extensions=base`;
    const response = await fetch(url);
    const data = await response.json();

    if (data.status === '1' && data.regeocode) {
      const { addressComponent, formatted_address } = data.regeocode;
      return {
        adcode: addressComponent.adcode,
        address: formatted_address,
        city: addressComponent.city,
        district: addressComponent.district,
      };
    } else {
      console.error('逆地理编码失败:', data.info);
      return null;
    }
  } catch (error) {
    console.error('请求地址信息失败:', error);
    return null;
  }
}; 